Date : 4 aout 1991
Protection : MOT DE PASSE
Programme : STRATEGO
Outils : SOFT-ICE V2.50, MASM, QUAID, EXE2BIN.
Fichier : STRATEGO.EXE, FRED4.COM
Temps pass� : 1 HEURE
Soci�t� : ACCOLADE
Divers : CREATION DU FICHIER FRED4.COM
Origine : INDONESIE
Num�ro : 118
On trouve relativement facilement l'endroit � alt�rer dans le fichier
STRATEGO.EXE, il s'agit du saut suivant;
983D:040D 3D0100 CMP AX,0001
983D:0410 7563 JNZ 0475 ; SAUTE SI MAUVAISE REPONSE...
983D:0412 B84000 MOV AX,0040
Donc il s'agit uniquement de forcer le saut se trouvant en CS:0410 en
0412 par un JMP 0412 ( EB00 ).
Malheureusement cette chaine ne se trouve pas en clair. Je visualise
l'ent�te du fichier pour m'apercevoir que c'est un fichier compact� par
LZ91.
Je d�compacte sur le champ mais cette fois-ci "on" me dit que le d�com-
pactage ne peut fonctionner car ce fichier � l'air de contenir des
overlays !!!
Que reste-t-il � faire ? d�tourner une interruption et modifier le code
en CS:0410 par un 74, ou un EB00.
Je lance QUAID pour voir quelle interruption s'approche le plus de la
demande de mot de passe.
Il s'agit de l'INT 21 sous-fonction 49, mais ce n'est qu'au bout de la
troisi�me fois que cette interruption est appel�e que la routine
demandant le mot de passe est mise en place... ceci n'est pas trop
g�nant il s'agira d�s lors de POPer le stack et de tester la position
0410 pour voir si elle contient 75.
; PATCH POUR LE PROGRAMME STRATEGO 3 aout 1991
; FREDDY_SOFT
code segment
org 100h
assume cs:code
start: jmp installe ; On va installer la routine r�sidente...
cr equ 0dh
lf equ 0ah
flag equ 49h ; Contenu de AH devant �tre test�.
adr_ip equ 0410h ; En ES:0410 il suffit de mettre 74.
patch equ 74h ; � mettre � la place de 75 en ES:0410h
instok db cr,lf,' D�tournement de l',39,'INT 21 sous-fonction 49'
db cr,lf
db ' ....FREDDY_SOFT....','$'
drap db 0,0
elimine db cr,lf,'J',39,'ai en principe tout remis en l',39,'�tat....'
db cr,lf,'$'
int21 label dword ; sauvegarde des adresses SEG:OFF de l'INT21 d'origine
i40off db 0,0 ; OFFSET
i40seg db 0,0 ; SEGMENT
tsrint40 proc far
jmp short apr�s_id
db 'FR' ; On intercalle au d�but du code un identificateur
apr�s_id: pushf
push ds
push ax
cmp byte ptr [drap],1 ; Si 1 on devient transparent.
jz suite ; Saut � l'INT 21 toutes fonctions valid�es.
cmp ah,flag ; AH = 49.
jnz suite ; Si non on traite les INT 21 normalement.
push dx ; Transfert de DX dans DS ( �conomie de 2 inst.)
pop ds ; Dans ce cas je peux PUSHER et POPER puisque je ne
; touche pas � SP.
cmp byte ptr ds:[adr_ip],75h
jnz suite ; si c'est pas bon on sort.
mov byte ptr ds:[adr_ip],patch
mov byte ptr [drap],1h
suite: pop ax ; On restaure tous les registres.
pop ds
popf
jmp int21 ; Appel de l'INT21 officielle.
tsrint40 endp
eor:
; ROUTINE D'INSTALLATION
installe: mov ax,3521h
int 21h
cmp word ptr es:[bx+2],'RF' ; On teste la pr�sence de la signature.
je away ; si pr�sent on d�sinstalle.
mov ax,cs ; CS --> DS
mov ds,ax ; DS = CS
mov ax,3521h ; on detourne l'int 21h.
int 21h ; sous-fonction 35.
mov word ptr [i40off],bx ; L'offset se retrouve en BX.
mov i40seg,es ; Le segment en ES.
mov ax,2521h ; Et on met l'ad. du resident
mov dx,offset tsrint40 ; sous-fonction 25 dont SEG:OFF se
int 21h ; trouve en DX <---( tsrint40 ).
mov dx,offset instok ; Offset du message de fin.
mov ah,09 ; Sorti du message...
int 21h
mov ah,07 ; Attente d'un caract�re au clavier.
int 21h
mov dx,eor-start+100h+15 ; On r�serve la m�moire qui doit rester
mov cl,4 ; en r�sident: DEBUT code - FIN code +
shr dx,cl ; 100h + 15. ( 100h car les zones data
mov al,0 ; sont plac�es de 0 � 100h dans un com.
; Puis d�calage de 4 � droite pour avoir
; le r�sultat en nombre de paragraphe
; + 1 ( ou + 15 comme ci-dessus ).
mov ah,31h ; Sortie et reservation
int 21h ; de la m�moire.
away: mov dx,word ptr es:i40off ; Restauration de OFF:SEG de l'INT 21
mov ax,word ptr es:i40seg ; d'origine.
mov ds,ax
mov ax,2521h ; Set vecteur de l' INT 21
int 21h
mov bx,es
mov es,es:[2ch]
mov ah,49h ; On lib�re la m�moire.
int 21h
mov es,bx
mov ah,49h
int 21h
push cs ; Mettre CS dans DS
pop ds
mov dx,offset elimine ; pointe sur d�but du message.
xor al,al
mov ah,9
int 21h ; Sortir message.
mov ah,4ch
int 21h ; On revient au DOS.
code ends
end start
|